package com.ufpb.algoritmosEstrutura.arvoreGeradoraMinima;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String[] args){
		StringTokenizer token;
		int somaCusto = 0;
		Rua[]ruas;
		LinkedList<Rua> sol = new LinkedList <Rua>();
		String arquivo = args[0];
		int pontos, inicio, fim, custo;
		BufferedReader leitor=null;
		BufferedWriter gravador = null;
		
		try{
			leitor=new BufferedReader(new FileReader(arquivo+".txt"));
			token=new StringTokenizer(leitor.readLine());
			pontos=Integer.parseInt(token.nextToken());
			ruas= new Rua[Integer.parseInt(token.nextToken())];
			ConjuntosDisjuntos conjuntos=new ConjuntosDisjuntos(pontos);
			for(int i=0;i<ruas.length;i++){
				token=new StringTokenizer(leitor.readLine());
				inicio=Integer.parseInt(token.nextToken());
				fim=Integer.parseInt(token.nextToken());
				custo=Integer.parseInt(token.nextToken());
				Rua r=new Rua(inicio,fim,custo);
			    ruas[i]=r;
		   }
			leitor.close();
			Sort.quickSort(ruas,0,ruas.length-1);
			for(Rua rua : ruas){
				if(conjuntos.ache(rua.getP1()-1) != conjuntos.ache(rua.getP2()-1)){
					somaCusto += rua.getCusto();
					sol.add(rua);
					conjuntos.uniao(rua.getP1()-1, rua.getP2()-1);
					
				}
			}
			gravador = new BufferedWriter(new FileWriter(arquivo + "-Kruskal.txt"));
			gravador.write("" + sol.size());
			gravador.newLine();
			for(Rua rua: sol){
				gravador.write(rua.getP1() + " " + rua.getP2() + " " + rua.getCusto());
				gravador.newLine();
			}
			gravador.write("Total: " + somaCusto);
			gravador.close();
		}catch( IOException exception){
			exception.getMessage();
		}
	}
}
